// $codepro.audit.disable packageNamingConvention

/** Packages */
package edu.gatech.team404;

/**
 * An information holder for an account.
 * @author Michael Dandy
 * @version 1.0
 */
public class Account {
	/** The unique user name of an account. */
	private String username;
	
	/** The password of an account. */
	private String password;
	
	/** The name of the account holder. */
	private String name;
	
	/** The email of the account holder. */
	private String email;
	
	/** The type of the account. It could be one of these values:
	 * 		<li> ADMIN </li>
	 * 		<li> INSTRUCTOR </li>
	 * 		<li> STUDENT </li>
	 * 		<li> UNKNOWN </li>
	 */
	private AccountType type;
	
	/** The status of the account. It could be one of these values:
	 * 		<li> ACTIVE </li>
	 * 		<li> SUSPENDED </li>
	 *		<li> UNKNOWN </li>
	 */
	private AccountStatus status;
	
	/**
	 * Constructor
	 * @param username the username of the account
	 * @param password the password of the account
	 * @param name the name of the user
	 * @param email the email of the user
	 * @param type the type of the account
	 */
	public Account (String username, String password, 
			String name, String email, AccountType type) {
		this (username, password, name, email, type, AccountStatus.ACTIVE);
	}
	
	/**
	 * Constructor
	 * @param username the username of the account
	 * @param password the password of the account
	 * @param name the name of the user
	 * @param email the email of the user
	 * @param type the type of the account
	 * @param status the status of the account
	 */
	public Account (String username, String password, 
					String name, String email, AccountType type, AccountStatus status) {
		this.username = username;
		this.password = password;
		this.name = name;
		this.email = email;
		this.type = type;
		this.status = status;
	}
	
	/**
	 * Get username of an account.
	 * @return the username
	 */
	public String getUsername() {
		return username;
	}
	
	/**
	 * Set username of an account.
	 * @param username the username of an account
	 */
	public void setUsername(String username) {
		this.username = username;
	}

	/**
	 * Get password of an account.
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * Set password of an account.
	 * @param password the password of an account
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * Get the name of an account.
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * Set the name of an account.
	 * @param name the name of the account holder
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * Get the email of an account.
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * Set the email of an account.
	 * @param  email the email of the account holder
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * Get the type of an account.
	 * @return the account type
	 */
	public AccountType getType() {
		return type;
	}

	/**
	 * Set the type of an account.
	 * @param type the account type
	 */
	public void setType(AccountType type) {
		this.type = type;
	}

	/**
	 * Get the status of an account.
	 * @return the account status
	 */
	public AccountStatus getStatus() {
		return status;
	}

	/**
	 * Set the status of an account.
	 * @param status the account status
	 */
	public void setStatus(AccountStatus status) {
		this.status = status;
	}

	/**
	 * Print the attributes of this account.
	 * @return the attributes of this account
	 */
	@Override
	public String toString() {
		return "Account [username=" + username + ", password=" + password
				+ ", name=" + name + ", email=" + email + ", type=" + type
				+ ", status=" + status + "]";
	}
	
	
}
